pdbgen_backup = false
pdbgen_groups = false

pdb_names = [
  'brush_select',
  'brush',
  'brushes',
  'buffer',
  'channel',
  'context',
  'debug',
  'display',
  'drawable_color',
  'drawable_edit',
  'drawable_filter',
  'drawable_select',
  'drawable',
  'dynamics',
  'edit',
  'file',
  'floating_sel',
  'font',
  'font_select',
  'fonts',
  'gimp',
  'gimprc',
  'gradient_select',
  'gradient',
  'gradients',
  'group_layer',
  'help',
  'image_autocrop',
  'image_color_profile',
  'image_convert',
  'image_grid',
  'image_guides',
  'image_sample_points',
  'image_select',
  'image_transform',
  'image_undo',
  'image',
  'item_transform',
  'item',
  'layer',
  'message',
  'paint_tools',
  'palette_select',
  'palette',
  'palettes',
  'path',
  'pattern_select',
  'pattern',
  'patterns',
  'pdb',
  'plug_in',
  'progress',
  'resource',
  'selection',
  'text_layer',
  'text_tool',
  'unit',
]

pdb_sources = []
foreach name : pdb_names
  pdb_sources += files('groups' / name + '.pdb')
endforeach


enum_headers = [
  meson.project_source_root() + '/libgimpbase/gimpbaseenums.h',
  meson.project_source_root() + '/libgimpconfig/gimpconfigenums.h',
  meson.project_source_root() + '/app/operations/operations-enums.h',
  meson.project_source_root() + '/app/core/core-enums.h',
  meson.project_source_root() + '/app/paint/paint-enums.h'
]

# Perl environment
perlsrcdir = meson.current_source_dir().replace('\\', '/')
perlbindir = meson.current_build_dir().replace('\\', '/')

perl_env = [
  'PDBGEN_BACKUP=' + (pdbgen_backup ? '1' : '0'),
  'PDBGEN_GROUPS=' + (pdbgen_groups ? '1' : '0'),
  'rootme='        + perlbindir,
  'srcdir='        + perlsrcdir,
  'destdir='       + meson.project_build_root().replace('\\', '/'),
  'builddir='      + meson.project_build_root().replace('\\', '/'),
  'topsrcdir='     + meson.project_source_root().replace('\\', '/'),
]

groups_pl_content    = '# This file is autogenerated\n'
groups_pl_content   += '@groups = qw(\n'
foreach source : pdb_names
  groups_pl_content += '    '+ source +'\n'
endforeach
groups_pl_content   += ');\n'


# All perl files

groups_pl = custom_target('groups.pl',
  input : [ ],
  output: [ 'groups.pl', ],
  command: [ python, '-c', 'import sys; sys.stdout.write(sys.argv[1])', groups_pl_content ],
  capture: true,
)

enumgen_run  = find_program('meson-enumgen.py')
pdbgen_run   = find_program('meson-pdbgen.py')
enumcode_run = find_program('meson-enumcode.py')

enums_pl = custom_target('enums.pl',
  input : [ 'meson-enumgen.py', 'enumgen.pl', 'enums-external.pl', enum_headers, ],
  output: [ 'stamp-enumgen.h', ],
  env: perl_env,
  command: [
    enumgen_run, perl, meson.project_source_root(), meson.project_build_root(),
    enum_headers,
  ],
  build_by_default: true,
)

pdbgen = custom_target('stamp-pdbgen.h',
  input : [
    files(
      'meson-pdbgen.py',
      'pdbgen.pl',

      'app.pl',
      'lib.pl',
      'pdb.pl',
      'stddefs.pdb',
      'util.pl',
    ),
    enums_pl,
    groups_pl,
    pdb_sources,
  ],
  output: [ 'stamp-pdbgen.h', ],
  env: perl_env,
  command: [
    pdbgen_run, perl, meson.project_source_root(), meson.project_build_root()
  ],
  build_by_default: true,
)

stamp_enumcode = custom_target('gimpenums.h',
  input : [
    files(
      'meson-enumcode.py',
      'enumcode.pl',
      'enumgen.pl',

      'util.pl',
    ),
    enums_pl,
    enum_headers,
  ],
  output: [ 'stamp-enumcode.h', ],
  env: perl_env,
  command: [
    enumcode_run, perl, meson.project_source_root(), meson.project_build_root()
  ],
  build_by_default: true,
)
